from sklearn.linear_model import LinearRegression
def get_confirmed(country="Argentina"):
return np.array(df_confirmed.loc[country][2:]).astype(int)
def get_recovered(country="Argentina"):
return np.array(df_recovered.loc[country][2:]).astype(int)
def get_deaths(country="Argentina"):
return np.array(df_deaths.loc[country][2:]).astype(int)
def get_infected(country="Argentina"):
return (get_confirmed(country)-get_recovered(country)-get_deaths(country))
def get_solved(country="Argentina"):
return get_recovered(country)+get_deaths(country)
def get_countries():
return list(df_confirmed.iloc[:,-1].sort_values(ascending=False).index)
def get_countries_confirmed():
return df_confirmed.loc[get_countries()].iloc[:,-1].values
def get_countries_recovered():
return df_recovered.loc[get_countries()].iloc[:,-1].values
def get_countries_deaths():
return df_deaths.loc[get_countries()].iloc[:,-1].values
def get_countries_infected():
return get_countries_confirmed() - get_countries_recovered() - get_countries_deaths()
def days_since_first_infected(country="Argentina"):
return sum(get_confirmed(country)>0)
def get_exp(country="Argentina", from_last=-20, to_last=0, window_size=5, epsilon = 1e-8):
exponents = list()
for idx in range(from_last, to_last-window_size):
reg=LinearRegression()
X = get_infected(country)[idx:idx+window_size]
if 0 not in X:
reg.fit(np.array(range(0,window_size)).reshape(-1,1),np.log(X).reshape(-1,1))
exponents.append(np.exp(reg.coef_[0]))
else:
exponents.append(1)
return exponents
def get_dates():
return df_confirmed.columns[4:]
def plot_stats(country="Argentina",confirmed=True, recovered=True, infected=True, deaths=True,solved=True,window_size=5):
dsfi = days_since_first_infected(country)
plt.figure(figsize=[18,12])
if confirmed:
plt.plot(get_confirmed(country)[-dsfi-1:],label=f"Confirmed. Current: {get_confirmed(country)[-1]}")
if recovered:
plt.plot(get_recovered(country)[-dsfi-1:],label=f"Recovered. Current: {get_recovered(country)[-1]}")
if deaths:
plt.plot(get_deaths(country)[-dsfi-1:],label=f"Deceased. Current: {get_deaths(country)[-1]}")
if infected:
plt.plot(get_infected(country)[-dsfi-1:],label=f"Infected. Current: {get_infected(country)[-1]}")
if solved:
plt.plot(get_solved(country)[-dsfi-1:],label=f"solved. Current: {get_solved(country)[-1]}")
plt.legend()
plt.grid()
ax=plt.gca()
ax=ax.twinx()
ax.plot(range(window_size-1,dsfi-1),get_exp(country,from_last=-dsfi,window_size=window_size),"--", color="k", label = f"factor de crecimiento. Current: {get_exp(country,from_last=-dsfi,window_size=window_size)[-1]}")
ax.plot([0,dsfi-1],[1,1],"--")
ax.plot([0,dsfi-1],[0,0],"-.")
flen=5
delta_delta_amp = 2.5
infected = get_infected(country)[-dsfi-1:]
infected_dif = np.correlate(np.diff(infected,prepend=infected[0]),[1/flen for i in range(flen)],mode='valid')
infected_dif_dif = np.correlate(np.diff(infected_dif,prepend=infected_dif[0]),[2.5/flen for i in range(flen)],mode='valid')
ax.plot(infected_dif/max(infected_dif),"--", label="diff")
ax.plot(infected_dif_dif/max(infected_dif),"--", label="diff diff")
plt.legend()
plt.show()